package com.ruoyi.platform.system.role.dao;

import com.ruoyi.platform.system.role.pojo.RoleDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 角色信息表
 *
 * @author lcf
 * @version 0.0.1
 * @since 2020-11-16 01:47:41
 */
@Mapper
@Repository
@Scope("prototype")
public interface RoleRdbDAO {
    /**
     * 插入数据 全部插入
     *
     * @param record {@link RoleDO}
     * @return 影响行数
     **/
    int insertRole(RoleDO record);

    /**
     * 插入数据 部分插入
     *
     * @param record {@link RoleDO}
     * @return 影响行数
     **/
    int insertRoleSelective(RoleDO record);

    /**
     * 插入数据 批量插入
     *
     * @param recordList {@link List<RoleDO>}
     * @return 影响行数
     **/
    int insertRoleBatch(@Param("list") List<RoleDO> recordList);

    /**
     * 批量部分插入
     *
     * @param recordList {@link List<RoleDO>}
     * @return 影响行数
     **/
    int insertRoleSelectiveBatch(@Param("list") List<RoleDO> recordList);

    /**
     * 更新数据 全部更新
     *
     * @param record {@link RoleDO}
     * @return 影响行数
     **/
    int updateRoleByPrimaryKey(RoleDO record);

    /**
     * 更新数据 部分更新
     *
     * @param record {@link RoleDO}
     * @return 影响行数
     **/
    int updateRoleByPrimaryKeySelective(RoleDO record);

    /**
     * 通过主键删除该数据 本质上是更改数据状态
     *
     * @param roleId 主键Number
     * @return 影响行数
     **/
    int delRoleByPrimaryKey(@Param("roleId") Long roleId);

    /**
     * 通过主键查询数据
     *
     * @param roleId 主键Number
     * @return {@link RoleDO}
     **/
    RoleDO selectRoleByPrimaryKey(@Param("roleId") Long roleId);

    /**
     * 通过主键列表查询数据
     *
     * @param roleIdList {@link List<Long>} 主键Number列表
     * @return {@link List<RoleDO>}
     **/
    List<RoleDO> selectRoleByPrimaryKeyList(@Param("list") List<Long> roleIdList);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询
     *
     * @param query {@link RoleDO}
     * @return {@link List<RoleDO>}
     **/
    List<RoleDO> selectByRole(RoleDO query);

    /**
     * 通过DO中不为空的数据组合成联合条件 查询数量
     *
     * @param query {@link RoleDO}
     * @return 统计行数
     **/
    int selectRoleCount(RoleDO query);

    /**
     * 根据角色名称查询
     *
     * @param roleName 角色名称
     * @return
     */
    List<RoleDO> selectByRoleName(String roleName);
}